package com.tjetc._1collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

@SuppressWarnings("all")
public class _1Collection {
    public static void main(String[] args) {
        /*
           Collection中的方法：
            我们以实现ArrayList讲解
         */
        Collection arrayList = new ArrayList();
        // 增加
        arrayList.add(1);
        arrayList.add(1);
        System.out.println(arrayList);
        // 删除
        arrayList.remove(1);
        System.out.println(arrayList);
        // 清空集合
        arrayList.clear();
        System.out.println(arrayList);

        Collection arrayList1 = new ArrayList();
        arrayList1.add(2);

        // 添加另外一个集合
        arrayList.addAll(arrayList1);
        System.out.println(arrayList);

        // 将集合转换成数组
        Object[] array = arrayList.toArray();
        System.out.println(Arrays.toString(array));

        // 判断是否包含某一个元素
        System.out.println("arrayList.contains(2) = " + arrayList.contains(2));

        // 判断是否包含另外一个集合中的元素
        arrayList1.add(3);
        System.out.println("arrayList.containsAll(arrayList1) = " + arrayList.containsAll(arrayList1));

        // 找到一样的就删除
        arrayList.removeAll(arrayList1);
        System.out.println(arrayList);

        // 遍历集合
        /*
             // 判断当前的游标和当当前数组中的个数是否相等 如果相等了 就返回false
             //  如果不等说明还有元素 游标要继续行走 如果等于了 那么说明遍历完毕 游标不需要再往下走了
             public boolean hasNext() {
                return cursor != size;
            }

         */
        /*
            // 获取元素
            public E next() {
            // 利用了fast-fail机制
            checkForComodification();
            // 保存当前的游标 不能破坏原有数据
            int i = cursor;
            // 判断当前的游标是否等于元素个数
            if (i >= size)
                throw new NoSuchElementException();
            // 获取父类对象的 也就是我们的ArrayList对象的数组
            Object[] elementData = ArrayList.this.elementData;
            // 判断当前的游标 是否大于 当前数组的长度
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            // 游标往下走一个
            cursor = i + 1;
            // 获取当前游标所指向的元素
            return (E) elementData[lastRet = i];
        }
         */

        arrayList.add(1);
        // 获取迭代器
        Iterator iterator = arrayList.iterator();
        // 判断是否有下一个元素
        // 迭代器的快捷键 itit
        // 注意：迭代器只能使用一次 如果想再次使用需要重新调用iterator()方法获取一个新的迭代器对象
        while (iterator.hasNext()) {
            // 获取元素
            System.out.println(iterator.next());
        }

        // 增强for循环: 这是一个语法糖 底层用的迭代器 主要用于遍历 如果想要用索引没有
        for (Object o : arrayList) {
            System.out.println(o);
        }

        // 数组也可以使用增强for
        int[] nums = new int[2];
        for (int num : nums) {
            System.out.println(num);
        }

    }
}
